#Boa:Dialog:Transaccion

import wx
import wx.grid
#from wx.lib.anchors import LayoutAnchors
import consultasBD
import utiles
import sincronizar_tabla  
import Vista
import os
from decimal import Decimal

ROJO = (255, 145, 145, 255)
VERDE = (145, 255, 145, 255)
AZUL = (145, 145, 255, 255)
BLANCO = (255, 255, 255, 255)
AMARILLO = (254, 248, 191, 255)
GRIS = ( 220, 220, 220, 255)
NEGRO = ( 0, 0, 0, 255)
VERDENEGRO = ( 47, 79, 79, 255)

MAXIMOPORTRANSFERENCIA = 100

def create(parent):
    return Transaccion(parent)

[wxID_TRANSACCION, wxID_TRANSACCIONBUTTON2, wxID_TRANSACCIONBUTTON3, 
 wxID_TRANSACCIONBUTTON4, wxID_TRANSACCIONCOMBOBOX1, wxID_TRANSACCIONGRID1, 
 wxID_TRANSACCIONIDORIGEN, wxID_TRANSACCIONSTATICTEXT1, 
 wxID_TRANSACCIONSTATICTEXT10, wxID_TRANSACCIONSTATICTEXT2, 
 wxID_TRANSACCIONSTATICTEXT3, wxID_TRANSACCIONSTATICTEXT4, 
 wxID_TRANSACCIONSTATICTEXT5, wxID_TRANSACCIONSTATICTEXT6, 
 wxID_TRANSACCIONSTATICTEXT7, wxID_TRANSACCIONSTATICTEXT8, 
 wxID_TRANSACCIONSTATICTEXT9, wxID_TRANSACCIONSUCURSALDESTINO, 
 wxID_TRANSACCIONSUCURSALORIGEN, wxID_TRANSACCIONTEXTCTRL1, 
 wxID_TRANSACCIONTEXTCTRL2, wxID_TRANSACCIONTEXTCTRL3, 
] = [wx.NewId() for _init_ctrls in range(22)]

class Transaccion(wx.Dialog):
    columnas =['Codigo','Descripcion','Talle','Color','Cant.','P. Venta', 'Stock']
    modificables = [0]

    cod_dict = {}
    
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_TRANSACCION, name='', parent=prnt,
              pos=wx.Point(34, 9), size=wx.Size(669, 600),
              style=wx.DEFAULT_DIALOG_STYLE, title='Alta de Transferencias')
        self.SetClientSize(wx.Size(661, 573))
        self.Show(True)

        self.comboBox1 = wx.ComboBox(choices=[], id=wxID_TRANSACCIONCOMBOBOX1,
              name='comboBox1', parent=self, pos=wx.Point(72, 8),
              size=wx.Size(130, 21), style=0, value='')
        self.comboBox1.SetLabel('')

        self.staticText1 = wx.StaticText(id=wxID_TRANSACCIONSTATICTEXT1,
              label='Origen:', name='staticText1', parent=self, pos=wx.Point(8,
              32), size=wx.Size(37, 13), style=0)

        self.staticText2 = wx.StaticText(id=wxID_TRANSACCIONSTATICTEXT2,
              label='Destino:', name='staticText2', parent=self, pos=wx.Point(8,
              56), size=wx.Size(41, 13), style=0)

        self.staticText3 = wx.StaticText(id=wxID_TRANSACCIONSTATICTEXT3,
              label=u'Fecha:', name='staticText3', parent=self,
              pos=wx.Point(544, 8), size=wx.Size(33, 13), style=0)

        self.staticText4 = wx.StaticText(id=wxID_TRANSACCIONSTATICTEXT4,
              label='Total items', name='staticText4', parent=self,
              pos=wx.Point(8, 528), size=wx.Size(52, 13), style=0)

        self.idorigen = wx.TextCtrl(id=wxID_TRANSACCIONIDORIGEN,
              name='idorigen', parent=self, pos=wx.Point(48, 32),
              size=wx.Size(24, 21), style=0, value='')
        self.idorigen.SetEditable(False)
        self.idorigen.Show(False)

        self.sucursalorigen = wx.TextCtrl(id=wxID_TRANSACCIONSUCURSALORIGEN,
              name='sucursalorigen', parent=self, pos=wx.Point(72, 32),
              size=wx.Size(184, 21), style=0, value='')
        self.sucursalorigen.SetEditable(False)

        self.sucursaldestino = wx.ComboBox(choices=[],
              id=wxID_TRANSACCIONSUCURSALDESTINO, name='sucursaldestino',
              parent=self, pos=wx.Point(72, 56), size=wx.Size(184, 21), style=0,
              value='')
        self.sucursaldestino.SetLabel('')

        self.textCtrl3 = wx.TextCtrl(id=wxID_TRANSACCIONTEXTCTRL3,
              name='textCtrl3', parent=self, pos=wx.Point(264, 56),
              size=wx.Size(64, 21), style=0, value='')
        self.textCtrl3.Bind(wx.EVT_KILL_FOCUS, self.OnKillFocus)

        self.textCtrl1 = wx.TextCtrl(id=wxID_TRANSACCIONTEXTCTRL1,
              name='textCtrl1', parent=self, pos=wx.Point(584, 8),
              size=wx.Size(72, 21), style=0, value='')
        self.textCtrl1.SetEditable(False)

        self.textCtrl2 = wx.TextCtrl(id=wxID_TRANSACCIONTEXTCTRL2,
              name='textCtrl2', parent=self, pos=wx.Point(88, 528),
              size=wx.Size(32, 21), style=0, value='')
        self.textCtrl2.SetEditable(False)

        self.staticText5 = wx.StaticText(id=wxID_TRANSACCIONSTATICTEXT5,
              label='P.T.C.', name='staticText5', parent=self, pos=wx.Point(264,
              40), size=wx.Size(31, 13), style=0)

        self.button3 = wx.Button(id=wxID_TRANSACCIONBUTTON3, label='Limpiar',
              name='button3', parent=self, pos=wx.Point(584, 56),
              size=wx.Size(72, 22), style=0)
        self.button3.Bind(wx.EVT_BUTTON, self.OnLimpiar,
              id=wxID_TRANSACCIONBUTTON3)

        self.button2 = wx.Button(id=wxID_TRANSACCIONBUTTON2,
              label='Guardar y Transmitir', name='button2', parent=self,
              pos=wx.Point(440, 528), size=wx.Size(128, 32), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnGuardarTransmitir,
              id=wxID_TRANSACCIONBUTTON2)

        self.button4 = wx.Button(id=wxID_TRANSACCIONBUTTON4, label='Salir',
              name='button4', parent=self, pos=wx.Point(576, 528),
              size=wx.Size(80, 23), style=0)
        self.button4.Bind(wx.EVT_BUTTON, self.OnSalir,
              id=wxID_TRANSACCIONBUTTON4)

        self.staticText7 = wx.StaticText(id=wxID_TRANSACCIONSTATICTEXT7,
              label='Usuario', name='staticText7', parent=self, pos=wx.Point(8,
              8), size=wx.Size(36, 13), style=0)

        self.staticText6 = wx.StaticText(id=wxID_TRANSACCIONSTATICTEXT6,
              label='DOBLE CLICK IZQUIERDA', name='staticText6', parent=self,
              pos=wx.Point(152, 528), size=wx.Size(136, 13), style=0)
        self.staticText6.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))
        self.staticText6.Enable(True)
        self.staticText6.Show(False)

        self.staticText8 = wx.StaticText(id=wxID_TRANSACCIONSTATICTEXT8,
              label='DOBLE CLICK DERECHA', name='staticText8', parent=self,
              pos=wx.Point(152, 544), size=wx.Size(124, 13), style=0)
        self.staticText8.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))
        self.staticText8.Show(True)

        self.staticText9 = wx.StaticText(id=wxID_TRANSACCIONSTATICTEXT9,
              label='- agrega una unidad', name='staticText9', parent=self,
              pos=wx.Point(296, 528), size=wx.Size(97, 13), style=0)
        self.staticText9.Show(False)

        self.grid1 = wx.grid.Grid(id=wxID_TRANSACCIONGRID1, name='grid1',
              parent=self, pos=wx.Point(8, 96), size=wx.Size(648, 424),
              style=0)
        self.grid1.EnableEditing(False)
        self.grid1.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK,
              self.OnDobleClickIzquierdo)
        self.grid1.Bind(wx.grid.EVT_GRID_CELL_RIGHT_DCLICK,
              self.OnDobleClickDerecho)

        self.staticText10 = wx.StaticText(id=wxID_TRANSACCIONSTATICTEXT10,
              label='- quita una unidad', name='staticText10', parent=self,
              pos=wx.Point(296, 544), size=wx.Size(87, 13), style=0)
        self.staticText10.Show(True)

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.padre = parent
        self.sucursal = self.padre.sucursalNro        
        self.orden = 0
        self.sucursalDic = {}
        self.recursividad = 0
        self.maximoRenglon = 0
        self.seguridad = ""
        self.textCtrl2.SetLabel("0")
        self.textCtrl1.SetValue(utiles.getfecha())
        self.idtransferencia = ""
        self.cargarSucursales()
        self.crearGrillas()
        self.llenarComboUsuarios()
        self.verificarInterrupcion()
        self.comboBox1.SetFocus()

    def llenarComboUsuarios(self):
        r1 = "SELECT nombre FROM vendedoras WHERE sucursal<>'0' "
        r2 = "ORDER BY nombre,sucursal"
        sql = r1+r2
        resultado = consultasBD.ordenCruda(sql)
        for item in resultado:
            self.comboBox1.Append(item[0])
        self.comboBox1.SetEditable(False)

    def actualizarTotal(self):
        total = 0
        for fila in xrange(self.grid1.GetNumberRows()):
            if self.grid1.GetCellValue(fila,0)=="":continue
            #total+= int(self.grid1.GetCellValue(fila,2))
            total+= 1
        self.textCtrl2.SetLabel(str(total))
       
    def cargarSucursales(self):
        #se llena segun la sucursal en la que me encuentro, el ORIGEN
        self.sucursalNro, self.nombreSuc = self.padre._sucursal_activa()
        self.sucursalorigen.ChangeValue(str(self.nombreSuc))
        self.idorigen.ChangeValue(str(self.sucursalNro))

        sql = "SELECT codsucursal,nombre FROM sucursales WHERE activa = 0"
        resultados = consultasBD.ordenCruda(sql)
        for sucu in resultados:
            self.sucursaldestino.Append(sucu[1])
            self.sucursalDic[sucu[1]] = str(sucu[0])
        self.sucursaldestino.SetEditable(False)

    def crearGrillas(self):
        #PTC,CodSussan,Cant,Descr,Talle,Color,Precio,Proveedor,Stock,Orden
        #0   1         2    3     4     5     6      7         8     9
        columnas = ['P.T.C','Codigo\nSussan','Cant','Descripcion','T.','Color',\
                    'Precio','Proveedor','Stock','Orden']
        self.grid1.CreateGrid(1,len(columnas))
        for i, col in enumerate(columnas): 
            self.grid1.SetColLabelValue(i, col)
        self.grid1.SetSelectionMode(wx.grid.Grid.wxGridSelectRows)
        self.grid1.EnableEditing(False)
        self.ajustarAnchoColumnas()
        self.grid1.Refresh()

    def buscarDatosProductos(self, ptc, sucursal):
        r01 = "SELECT p1.ptc,p1.codsussan,p2.descri as descripcion,\n "
        r02 = "       p1.talle,p1.color,p3.nombre as colornombre,\n "
        r03 = "       p2.preciolt1 as precio,p5.nombre,p4.stock \n "
        r04 = "FROM \n "
        r05 = "  (SELECT id as ptc,codsussan,talle,color \n "
        r06 = "   FROM producto_talle_color \n "
        r07 = "   WHERE id='"+ptc+"') AS p1,\n "
        r08 = "  productos AS p2, \n "
        r09 = "  colores AS p3, \n "
        r10 = "  stock AS p4, \n "
        r11 = "  proveedor AS p5 \n "
        r12 = "WHERE \n "
        r13 = "  p1.codsussan = p2.codsussan AND \n "
        r14 = "  p1.color = p3.idcolor AND \n "
        r15 = "  p1.ptc = p4.ptc AND \n "
        r16 = "  p4.sucursal = '"+sucursal+"' AND \n "
        r17 = "  p2.proveedor = p5.idproveedor \n "
        consultaSQL = r01+r02+r03+r04+r05+r06+r07+r08+r09+r10+r11+r12+r13+r14+r15+r16+r17
        resultado = consultasBD.ordenCrudaDict(consultaSQL)
        if resultado == None or resultado == ():
            print "Producto no encontrado en esta sucursal"
            return False,()
        return True,resultado[0]

    def ajustarAnchoColumnas(self):
        for y in xrange(self.grid1.GetNumberCols()):
            self.grid1.AutoSizeColumn(y,True)

    def publicarRenglon(self,x,datos):
        #PTC,CodSussan,Cant,Descr,Talle,Color,Precio,Proveedor,Stock,Orden
        #0   1         2    3     4     5     6      7         8     9
        self.orden+= 1
        self.grid1.SetCellValue(x,0,datos['ptc'])
        self.grid1.SetCellValue(x,1,datos['codsussan'])
        #actualizar cantidad
        if self.grid1.GetCellValue(x,2)=="":
            cantidad2 = 0
        else:
            cantidad2 = int(self.grid1.GetCellValue(x,2))
        self.grid1.SetCellValue(x,2,str(1+cantidad2))
        self.grid1.SetCellAlignment(x, 2, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.SetCellBackgroundColour(x,2,GRIS)

        self.grid1.SetCellValue(x,3,datos['descripcion'][:20])
        self.grid1.SetCellValue(x,4,datos['talle'])
        self.grid1.SetCellValue(x,5,datos['color']+"/"+datos['colornombre'])
        self.grid1.SetCellValue(x,6,str(datos['precio']))
        self.grid1.SetCellValue(x,7,datos['nombre'][:20])
        try:
            stock = int(datos['stock'])
        except:
            stock = 0
        self.grid1.SetCellValue(x,8,str(stock))
        self.grid1.SetCellValue(x,9,str(self.orden))

        self.grid1.SetCellAlignment(x, 1, wx.ALIGN_CENTER, wx.ALIGN_CENTRE)
        self.grid1.SetCellAlignment(x, 6, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.SetCellAlignment(x, 8, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)

        self.ajustarAnchoColumnas()
        self.grid1.Refresh()
        return True

    def buscarPTCenGrilla(self,ptc):
        for x in xrange(self.grid1.GetNumberRows()):
            if self.grid1.GetCellValue(x,0)==ptc:return x
        return -1

    def OnKillFocus(self, event):
        if self.textCtrl3.GetLabel()!="":
            self.OnAceptarCargarPTC(None)
            self.textCtrl3.SetLabel("")
            self.textCtrl3.SetFocus()
            return

    def OnKillFocusAceptar(self, event):
        self.OnAceptarCargarPTC(None)
        self.textCtrl3.SetLabel("")
        self.textCtrl3.SetFocus()

    def OnAceptarCargarPTC(self, event):
        if self.textCtrl3.GetLabel()=="":
            return
        ptc = self.textCtrl3.GetValue()
##        fil = self.buscarPTCenGrilla(ptc)
##        agregarRenglon = False
##        if fil < 0: 
##            fil = self.grid1.GetNumberRows() - 1
##            self.grid1.AppendRows()
##            agregarRenglon = True
        fil = self.grid1.GetNumberRows() - 1
        self.grid1.AppendRows()
        if fil > MAXIMOPORTRANSFERENCIA:
            texto = "Se ha llegado al maximo de item por transferencia"
            texto+= "\nInicie una nueva si desea enviar mas productos."
            utiles.mensaje(None,texto)
            self.almacenamientoTemporal(fil)
            self.actualizarTotal()
            self.textCtrl3.SetLabel("")
            self.textCtrl3.SetFocus()
            self.grid1.Refresh()
            return
            
        agregarRenglon = True

        #PTC,CodSussan,Cant,Descr,Talle,Color,Precio,Proveedor,Stock,Orden
        #0   1         2    3     4     5     6      7         8     9
        if agregarRenglon:
            #nuevo PTC
            sucursal = self.idorigen.GetValue()
            resultado,datos = self.buscarDatosProductos(ptc,sucursal)

            if not resultado:
                utiles.mensaje(None,"PTC inexistente\nen esta sucursal")
                self.textCtrl3.SetLabel("")
                self.textCtrl3.SetFocus()
                return
            self.publicarRenglon(fil,datos)
        else:
            #PTC ya existe
            cantidad = int(self.grid1.GetCellValue(fil,2))
            cantidad+= 1
            self.grid1.SetCellValue(fil,2,str(cantidad))

        self.almacenamientoTemporal(fil)
        self.actualizarTotal()
        self.textCtrl3.SetLabel("")
        self.textCtrl3.SetFocus()
        self.grid1.Refresh()

    def OnDobleClickIzquierdo(self, event):
        #suma cantidad
##        if self.grid1.GetGridCursorRow()==(self.grid1.GetNumberRows()-1):
##            return
##        fila = self.grid1.GetGridCursorRow()
##        if self.grid1.GetCellValue(fila,0)=="":
##            return
##
##        cantidad = int(self.grid1.GetCellValue(fila,2))
##        cantidad+= 1
##        self.grid1.SetCellValue(fila,2,str(cantidad))
##        self.almacenamientoTemporal(fila)
        self.actualizarTotal()

    def OnDobleClickDerecho(self, event):
        #resta cantidad
        if self.grid1.GetGridCursorRow()==(self.grid1.GetNumberRows()-1):
            return
        fila = self.grid1.GetGridCursorRow()
        self.grid1.DeleteRows(fila)
##        if self.grid1.GetCellValue(fila,0)=="":
##            return
##
##        cantidad = int(self.grid1.GetCellValue(fila,2))
##        cantidad-= 1
##        self.grid1.SetCellValue(fila,2,str(cantidad))
##        
##        #borra renglon
##        if cantidad==0:
##            self.almacenamientoTemporal(fila,True)
##            self.actualizarTotal()
##            self.grid1.DeleteRows(fila)
##            return
##
        self.almacenamientoTemporal(fila,True)
        self.actualizarTotal()

    def OnSalir(self, event):
        self.Close()

    def almacenamientoTemporal(self,fila,borrar=False):
        if not borrar:
            cadena = str(fila)+"[;]"
            for item in xrange(self.grid1.GetNumberCols()):
                aux = str(self.grid1.GetCellValue(fila,item))
                aux = aux.replace("\n","")
                cadena+= aux+"[;]"
            cadena = cadena[:-3]
        else:
            cadena = "-1[;]"+str(fila)
        f=open("TransferenciaNueva.txt","a")
        f.write(cadena+"\n")
        f.close()

    def verificarInterrupcion(self):
        if not os.path.isfile("TransferenciaNueva.txt"):
            f=open("TransferenciaNueva.txt","w")
            f.close()
            print "Almacenamiento de transferencia iniciado"
            return
        #existe archivo, por lo tanto un corte interrumpio la carga y se debe recuperar la informacion
        print "Restaurando ultima transferencia"
        f=open("TransferenciaNueva.txt","r")
        lista = f.readlines()
        f.close()
        for item in lista:
            cadena = item.split("[;]")
            if cadena[0]=="-1":
                self.grid1.DeleteRows(int(cadena[1]))
                continue
            fila = int(cadena[0])
            #PTC,CodSussan,Cant,Descr,Talle,Color,Precio,Proveedor,Stock,Orden
            #0   1         2    3     4     5     6      7         8     9
            self.grid1.SetCellValue(fila,0,cadena[1])
            self.grid1.SetCellValue(fila,1,cadena[2])
            self.grid1.SetCellValue(fila,2,cadena[3])
            self.grid1.SetCellBackgroundColour(fila,2,GRIS)
            self.grid1.SetCellValue(fila,3,cadena[4])
            self.grid1.SetCellValue(fila,4,cadena[5])
            self.grid1.SetCellValue(fila,5,cadena[6])
            self.grid1.SetCellValue(fila,6,cadena[7])
            self.grid1.SetCellValue(fila,7,cadena[8])
            self.grid1.SetCellValue(fila,8,cadena[9])
            self.grid1.SetCellValue(fila,9,cadena[10])

            self.grid1.SetCellAlignment(fila, 1, wx.ALIGN_CENTER, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fila, 2, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fila, 6, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fila, 8, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)

            if fila<(self.grid1.GetNumberRows()-1):
                continue
            self.ajustarAnchoColumnas()
            self.grid1.AppendRows()

        self.actualizarTotal()
        self.sucursaldestino.SetFocus()

    def OnLimpiar(self, event):
        try:
            os.remove("TransferenciaNueva.txt")
        except:
            print "Archivo inexistente"
        self.grid1.ClearGrid()
        for fila in xrange(self.grid1.GetNumberRows()):
            self.grid1.DeleteRows()
        self.grid1.AppendRows()
        self.verificarInterrupcion()
        self.actualizarTotal()
        self.sucursaldestino.SetLabel("")
        self.sucursaldestino.SetFocus()
        self.textCtrl3.SetLabel("")

    def verificarGrabacion(self):
        if self.comboBox1.GetLabel()=="":
            texto = "QUIEN ES USTED?\n"
            texto+= "Identifiquese por favor"
            utiles.mensaje(None,texto)
            self.comboBox1.SetFocus()
            return False
        if self.sucursaldestino.GetLabel()=="":
            texto = "HACIA DONDE VAN ESTOS PRODUCTOS?\n"
            texto+= "Debe indicar sucursal destino"
            utiles.mensaje(None,texto)
            self.sucursaldestino.SetFocus()
            return False
        return True

    def OnGuardarTransmitir(self, event):
        if not self.verificarGrabacion():
            return

        creada = False
        try:
            consultasBD.begin()
            
            idtransferencia = utiles.secuencia("transferencia", self.idorigen.GetValue())
            self.idtransferencia = idtransferencia
            idsucorigen = self.idorigen.GetLabel()
            idsucdestino = self.sucursalDic[self.sucursaldestino.GetLabel()]
            fecha = utiles.getfechaInverseTime()
            estado = '0' #0 no recibido, 1 recibido
            auditoria = self.comboBox1.GetLabel()
            seguridad = utiles.asignaValorUnico()
            self.seguridad = seguridad

            restaStock = {}
            ordenInterno = 0
            for fila in xrange(self.grid1.GetNumberRows()):
                #PTC,CodSussan,Cant,Descr,Talle,Color,Precio,Proveedor,Stock,Orden
                #0   1         2    3     4     5     6      7         8     9
                if self.grid1.GetCellValue(fila,0)=="":
                    continue
                ptc = self.grid1.GetCellValue(fila,0)
                codsussan = self.grid1.GetCellValue(fila,1)
                cantidad = self.grid1.GetCellValue(fila,2)
                orden = self.grid1.GetCellValue(fila,9)
                r1 = "INSERT INTO transferencia(idtransferencia,idsucorigen, \n"
                r2 = "            idsucdestino,fecha,ptc,codsussan,cantidad, \n"
                r3 = "            estado,auditoria,orden,seguridad) \n"
                r4 = "VALUES('"+idtransferencia+"','"+idsucorigen+"','"
                r5 = idsucdestino+"','"+fecha+"','"+ptc+"','"+codsussan+"','"
                r6 = cantidad+"','"+estado+"','"+auditoria+":"+orden+"','"
                r7 = str(ordenInterno)+"','"+str(seguridad)+"'); \n"
                sql = r1+r2+r3+r4+r5+r6+r7
                creada = True
                sincronizar_tabla.addChange(sql=sql)
                consultasBD.executaSinCommit(None, sql)
                ordenInterno+= 1

                try:
                    aux = restaStock[ptc]
                    aux+= 1
                    restaStock[ptc] = aux
                except:
                    restaStock[ptc] = 1

            print "Procesando stock"
            for clave in restaStock:
                ptc = clave
                cantidad = restaStock[ptc]
                stock = utiles.stock_sumado(ptc,idsucorigen,-Decimal(cantidad))
                r1 = "UPDATE stock SET "
                r2 = "stock='%s' WHERE ptc='%s' AND sucursal='%s' " % (str(stock),ptc,idsucorigen)
                sql = r1+r2
                
                sincronizar_tabla.addChange(sql=sql)
                consultasBD.executaSinCommit(None, sql)
                    
            consultasBD.commit()
        except:
            consultasBD.rollback()
            utiles.mensaje(None,"Error al grabar")
            return

        if not creada:
            utiles.mensaje(None,"No hay transferencia que guardar")
        else:
            self.OnImprimir(None)
            self.OnLimpiar(None)
            try:
                sincronizar_tabla.syncServerTables(self, ["transferencia", "stock"])
                texto = "La transferencia se guardo y transmitio correctamente"
                utiles.mensaje(self,texto)
            except:
                texto = "La transferencia no pudo sincronizarse\n"
                texto+= "Intentelo mas tarde en forma manual"
                utiles.mensaje(None,texto)
        
        self.Close()

    def OnImprimir(self, event):
        print "Imprimir"
        #PTC,CodSussan,Cant,Descr,Talle,Color,Precio,Proveedor,Stock
        #0   1         2    3     4     5     6      7         8

        f=open("c:\\matrisamor.doc\\reporte-TransferenciaNueva.html","w")
        numeroPagina = 1
        nrosuc,nombresuc = utiles.datosSucursal()
        
        totalItemPorPagina = 50
        totalPaginas = int(self.grid1.GetNumberRows()-1) / totalItemPorPagina 
        totalPaginas+= 1

        def encabezadoPagina(texto):
            fecha = utiles.getfechaTime()

            a = '<table width="100%" cellspacing="0" border="0">\n'
            a+= '<tr>\n'
            a+= '<td valign="center" align="left" width="33%">'
            a+= 'SUSSAN BOUTIQUE<br>Transferencia - CODIGO: '+self.seguridad
            a+= '</td>\n'
            a+= '<td valign="center" align="left" width="34%">'
            a+= '<br>'
            a+= '</td>\n'
            a+= '<td valign="center" align="right" width="33%">'+fecha
            a+= '<br>P&aacute;gina '+str(numeroPagina)+' / '+str(totalPaginas)+'</td>\n'
            a+= '</tr>\n'
            a+= '</table>\n'
            a+= '<table width="100%" cellspacing="0" border="0">\n'
            a+= '<tr>\n'
            a+= '<td valign="center" align="left" width="33%">'
            a+= 'ORIGEN '+self.sucursalorigen.GetLabel()+'<br>\n'
            a+= 'DESTINO '+self.sucursaldestino.GetLabel()+'\n'
            a+= '</td>'
            a+= '<td valign="center" align="left" width="34%">\n'
            a+= 'TRANSFERENCIA: '+self.idtransferencia+'<br>\n'
            a+= 'TOTAL PRODUCTOS: '+self.textCtrl2.GetLabel()+'\n'
            a+= '</td>\n'
            a+= '<td valign="center" align="right" width="33%">\n'
            a+= 'USUARIO: '+self.comboBox1.GetLabel()+'\n'
            a+= '</td>\n'
            a+= '</tr>\n'
            a+= '</table>\n<hr>'
            texto+= a
            return texto
        
        def encabezadoTabla(texto):
            #PTC,CodSussan,Cant,Descr,Talle,Color,Precio,Proveedor,Stock
            #0   1         2    3     4     5     6      7         8
            a = '<hr>'

            tama = '"0.05"'
            a+= '<table width="100%" cellspacing="1" border="1"> \n'
            a+= '<tr>\n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Orden</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>P.T.C.</font></td> \n'
            a+= '<td valign="top" align="center"><font size='+tama+'>CodSussan</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Descripci&oacute;n</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Talle</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Color</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Proveedor</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Cantidad</font></td> \n'
            a+= '</tr> \n'
            a+= '<tr>\n'
            a+= '<td colspan="8"></td>\n'
            a+= '</tr>\n'
            texto+= a
            return texto
        
        cadena = '<?xml version="1.0" encoding="utf-8" ?> \n'
        cadena+= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> \n'
        cadena+= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> \n'
        cadena+= '<head> \n'
        cadena+= '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> \n'
        cadena+= '<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> \n'
        cadena+= '<title>Sussan Boutique</title> \n'
        cadena+= '</head> \n'
        cadena+= '<body> \n'

        cadena = encabezadoPagina(cadena)
        cadena = encabezadoTabla(cadena)
        f.write(cadena)

        orden = 0
        renglon = 0
        for i in xrange(self.grid1.GetNumberRows()):
            #PTC,CodSussan,Cant,Descr,Talle,Color,Precio,Proveedor,Stock
            #0   1         2    3     4     5     6      7         8
            if self.grid1.GetCellValue(i,0)=="":
                continue
            orden+= 1
            ptc = self.grid1.GetCellValue(i,0)
            codsussan = self.grid1.GetCellValue(i,1)
            descripcion = self.grid1.GetCellValue(i,3)
            talle = self.grid1.GetCellValue(i,4)
            color = self.grid1.GetCellValue(i,5)
            proveedor = self.grid1.GetCellValue(i,7)
            cantidad = self.grid1.GetCellValue(i,2)
            
            tama = '"0.2"'
            cadena = '<tr> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+str(orden)+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+ptc+'</font></td> \n'
            cadena+= '<td valign="top" align="center"><font size='+tama+'>'+codsussan+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+descripcion+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+talle+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+color+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+proveedor+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+cantidad+'</font></td> \n'
            cadena+= '</tr>\n'
            f.write(cadena)
            
            renglon+= 1
            
            if renglon == totalItemPorPagina :
                f.write("</table><!-- salto de pagina -->\n")
                f.write("<p STYLE='page-break-after: always;'></p>\n")
                renglon = 0
                numeroPagina+= 1
                cadena = encabezadoPagina("")
                cadena = encabezadoTabla(cadena)
                f.write(cadena)

        tama = '"0.2"'
            
        cadena = '</table>\n'
        cadena+= '<br><br>'
        cadena+= '<font size="0.2">'
        cadena+= '<table width="100%" cellspacing="0" border="1">'
        cadena+= '<tr><td>'
        cadena+= '<table width="100%" cellspacing="0" border="0"> '
        cadena+= '<tr>'
        cadena+= '<td valign="top" align="center"><br><br><br></td> '
        cadena+= '<td valign="top" align="center"><br><br><br></td> '
        cadena+= '<td valign="top" align="center"><br><br><br></td> '
        cadena+= '</tr>'
        cadena+= '<tr>'
        cadena+= '<td valign="top" align="center">....................</td> '
        cadena+= '<td valign="top" align="center"> </td> '
        cadena+= '<td valign="top" align="center">....................</td> '
        cadena+= '</tr>'
        cadena+= '<tr>'
        cadena+= '<td valign="top" align="center">firma y aclaracion</td> '
        cadena+= '<td valign="top" align="center"> </td> '
        cadena+= '<td valign="top" align="center">firma y aclaracion</td> '
        cadena+= '</tr>'
        cadena+= '<tr>'
        cadena+= '<td valign="top" align="center">(quien hace en ORIGEN)</td> '
        cadena+= '<td valign="top" align="center"> </td> '
        cadena+= '<td valign="top" align="center">(quien controla en ORIGEN)</td> '
        cadena+= '</tr>'
        cadena+= '</table>'
        cadena+= '</td>'
        cadena+= '<td>'
        cadena+= '<table width="100%" cellspacing="0" border="0"> '
        cadena+= '<tr>'
        cadena+= '<td valign="top" align="center"><br><br><br></td> '
        cadena+= '<td valign="top" align="center"><br><br><br></td> '
        cadena+= '<td valign="top" align="center"><br><br><br></td> '
        cadena+= '</tr>'
        cadena+= '<tr>'
        cadena+= '<td valign="top" align="center">....................</td> '
        cadena+= '<td valign="top" align="center"> </td> '
        cadena+= '<td valign="top" align="center">....................</td> '
        cadena+= '</tr>'
        cadena+= '<tr>'
        cadena+= '<td valign="top" align="center">firma y aclaracion</td> '
        cadena+= '<td valign="top" align="center"> </td> '
        cadena+= '<td valign="top" align="center">firma y aclaracion</td> '
        cadena+= '</tr>'
        cadena+= '<tr>'
        cadena+= '<td valign="top" align="center">(quien recepciona en DESTINO)</td> '
        cadena+= '<td valign="top" align="center"> </td> '
        cadena+= '<td valign="top" align="center">(quien controla en DESTINO)</td> '
        cadena+= '</tr>'
        cadena+= '</table>'
        cadena+= '</td></tr>'
        cadena+= '</table></font> '
        f.write(cadena)
        f.close()

        import os
        os.system("taskkill /IM firefox.exe /F")
        os.system("c:\\explorer.lnk c:\\matrisamor.doc\\reporte-TransferenciaNueva.html")

